using System;

namespace RBAC.Read.Api.Application.Options
{
    /// <summary>
    /// 天气服务配置项。
    /// 说明：
    /// - API Key 优先从环境变量 <c>OPENWEATHER_KEY</c> 读取，其次读取配置 <c>Weather:OpenWeatherKey</c>。
    /// - <see cref="Units"/> 支持 <c>metric</c>/<c>imperial</c>。
    /// - <see cref="CacheTtlMinutes"/> 控制 IMemoryCache 缓存时间。
    /// - <see cref="WeatherBase"/>, <see cref="ForecastBase"/>, <see cref="OneCallBase"/> 与 <see cref="GeoBase"/> 可按需覆盖以支持代理。
    /// </summary>
    public class WeatherOptions
    {
        /// <summary>
        /// OpenWeather API Key。
        /// 优先环境变量 <c>OPENWEATHER_KEY</c>，其次配置 <c>Weather:OpenWeatherKey</c>。
        /// </summary>
        public string? OpenWeatherKey { get; set; }
        /// <summary>
        /// 单位：<c>metric</c>/<c>imperial</c>，默认 <c>metric</c>。
        /// </summary>
        public string Units { get; set; } = "metric";
        /// <summary>
        /// 语言参数，传给 OpenWeather 的 lang，例如 zh_cn、en、ja 等，默认 zh_cn。
        /// 仅影响描述（description）的本地化。
        /// </summary>
        public string Lang { get; set; } = "zh_cn";
        /// <summary>
        /// 缓存时间（分钟），用于缓存地理解析与 One Call 响应。 
        /// </summary>
        public int CacheTtlMinutes { get; set; } = 10;
        /// <summary>
        /// data/2.5/weather API 基址（可覆盖，默认免费端点）。
        /// </summary>
        public string WeatherBase { get; set; } = "https://api.openweathermap.org/data/2.5/weather";
        /// <summary>
        /// data/2.5/forecast API 基址（可覆盖，免费 3 小时步长预报）。
        /// </summary>
        public string ForecastBase { get; set; } = "https://api.openweathermap.org/data/2.5/forecast";
        /// <summary>
        /// One Call 3.0 API 基址（可覆盖）。 
        /// </summary>
        public string OneCallBase { get; set; } = "https://api.openweathermap.org/data/3.0/onecall";
        /// <summary>
        /// 地理编码 API 基址（可覆盖）。
        /// </summary>
        public string GeoBase { get; set; } = "https://api.openweathermap.org/geo/1.0/direct";
    }
}
